package com.atguigu.gmall.activity.service;

import com.atguigu.gmall.activity.model.SeckillGoods;
import com.atguigu.gmall.activity.model.UserRecode;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.order.model.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

public interface SeckillGoodsService extends IService<SeckillGoods> {
    /**
     * 查询当日参与秒杀商品列表
     * @return
     */
    List<SeckillGoods> findAll();

    /**
     * 查询指定秒杀商品信息
     * @param skuId
     * @return
     */
    SeckillGoods getSeckillGoods(Long skuId);

    /**
     * 秒杀请求入队
     * @param skuId 商品ID
     * @param skuIdStr 用户抢购码
     * @return
     */
    Result seckillRequestToQueue(String userId, Long skuId, String skuIdStr);

    /**
     * 预下单处理
     * @param userRecode
     */
    void processPreSeckillOrder(UserRecode userRecode);

    /**
     * 扣减秒杀库存 缓存Redis以及MySQL
     * @param skuId
     */
    void updateStock(Long skuId);

    /**
     * 检查秒杀订单-秒杀结果
     *
     * @param skuId
     * @return
     */
    Result checkSeckillResult(String userId, Long skuId);


    /**
     * 秒杀订单确认页面渲染需要参数汇总接口
     * @return
     */
    Result seckillTradeData(String userId);

    /**
     * 保存秒杀订单
     * @param orderInfo
     * @return
     */
    Result submitSeckillOrder(OrderInfo orderInfo);

    /**
     * 清理秒杀产生相关缓存数据，更新数据库中秒杀商品状态
     */
    void closeSeckillOrderAndClearCache();
}
